package TopOneHundred;

import java.util.HashMap;
import java.util.Map;

/**
 * 给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
 * 说明：
 * 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？
 * 输入: [2,2,1]
 * 输出: 1
 * @author le
 */
public class SingleNumber
{
    public static void main(String[] args)
    {
        int[] nums = {1, 2,3,0,4,6};
        SingleNumber singleNumber = new SingleNumber();
        singleNumber.singleNumber(nums);

    }

    public int singleNumber(int[] nums)
    {
        HashMap<Integer, Integer> map = new HashMap<>(0);
        for (int i = 0;i < nums.length;i++){
            if (map.containsKey(nums[i])){
                map.put(nums[i], 2);
                continue;
            }
            map.put(nums[i],1);
        }
        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            if (entry.getValue() == 1){
                return entry.getKey();
            }
        }
        return 0;
    }

    public void sort(int[] arr,int left,int right){
        if (left < right){
            int i = left;
            int j = right;
            int key = arr[i];

            while(i < j){
                while(i < j && arr[j] > key){
                    j--;
                }
                if (i < j){
                    arr[i++] = arr[j];
                }
                while(i < j && arr[i] < key){
                    i++;
                }
                if (i < j){
                    arr[j--] = arr[i];
                }
            }
            arr[i] = key;
            sort(arr,left, i-1);
            sort(arr,i+1, right);
        }
    }
}